package MyThread;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: AliceMana
 * Date: 2022-12-31
 * Time: 16:04
 */

// 通过这个代码来演示, 多线程和单线程相比, 效率的提升
public class ThreadDemo12 {
    public static void main(String[] args) throws InterruptedException {
        // 假设当前有两个变量, 需要把两个变量各自自增1000_0000次(典型的CPU密集型的场景)
        // 可以一个线程, 先针对a进行自增, 然后再针对b自增
        // 还可以两个线程,分别对a和b自增

        // serial();
        concurrency();
    }

    // 串行执行, 一个线程完成
    public static void serial() {
        // 为了衡量代码的执行速度, 加上个计时的操作

        // 获取到当前系统的 ms 级的时间戳
        long beg = System.currentTimeMillis();
        long a = 0;
        for (long i = 0; i < 100_0000_0000L; i++) {
            a++;
        }
        long b = 0;
        for (long i = 0; i < 100_0000_0000L; i++) {
            b++;
        }
        long end = System.currentTimeMillis();
        System.out.println("执行时间: " + (end - beg) + " ms");
    }

    public static void concurrency() throws InterruptedException {
        // 使用两个线程, 分别完成自增
        Thread t1 = new Thread(() -> {
            long a = 0;
            for (long i = 0; i < 100_0000_0000L; i++) {
                a++;
            }
        });
        Thread t2 = new Thread(() -> {
            long b = 0;
            for (long i = 0; i < 100_0000_0000L; i++) {
                b++;
            }
        });

        // 开始计时
        long beg = System.currentTimeMillis();
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        long end = System.currentTimeMillis();

        System.out.println("并发执行时间: " + (end - beg) + " ms");
    }
}
